package com.example.springcloud.zuul.springcloudzuul.zuul;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;

import javax.servlet.http.HttpServletRequest;

/**
 *
 * zuul 过滤链
 *
 *      这里模拟校验Token
 *
 * weiximei on 2018/6/12
 */
public class TokenFilter extends ZuulFilter {

    /**
     * 过滤器类型
     *
     *  pre -》 routing -》 error -》 post
     *
     *  pre 请求映射路径
     *  routing 请求转发
     *  error 出现错误
     *  post 最后做处理
     *
     * @return
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     * 过滤器 顺序
     *      数字越大，与靠后执行
     *
     * @return
     */
    @Override
    public int filterOrder() {
        return 0;
    }

    /**
     * 这个过滤器 是否生效
     * @return true生效，false不生效(默认值)
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     * 执行流程
     * @return
     */
    @Override
    public Object run() {

        // 获取 zuul 当前的上下文
        RequestContext context = RequestContext.getCurrentContext();
        HttpServletRequest request = context.getRequest();
        String token = request.getParameter("token");
        if (token == null){
            // 把当前的响应设置为false，也就当前过滤器停掉
            context.setSendZuulResponse(false);
            // 设置一个相应码  401
            context.setResponseStatusCode(401);
            context.setResponseBody("没有权限");

            // 过滤器的异常处理，返回到页面上
//            context.set("error.status_code",400);
//            context.set("error.exception",e);
//            context.set("error.message","xxx");

            return null;
        }

        return null;
    }
}
